package paidaxing.blog.post.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
import paidaxing.blog.common.result.PageResult;
import paidaxing.blog.common.result.Result;
import paidaxing.blog.post.dto.PostDTO;
import paidaxing.blog.post.dto.PostStatsDTO;
import paidaxing.blog.post.dto.request.PostQueryRequest;
import paidaxing.blog.post.dto.request.PostRequestDTO;
import paidaxing.blog.post.service.PostsService;

/**
 * 文章控制器
 */
@Slf4j
@RestController
@RequestMapping("/posts")
public class PostController {

    @Autowired
    private PostsService postsService;

    /**
     * 创建文章
     * 
     * @param postRequestDTO 文章请求DTO
     * @return 创建的文章
     */
    @PostMapping()
    public Result<PostDTO> createPost(@RequestBody PostRequestDTO postRequestDTO){
        if(log.isInfoEnabled()){
            log.info("创建文章: {}", postRequestDTO);
        }
        PostDTO postDTO = postsService.createPost(postRequestDTO);
        return Result.success("创建文章成功!", postDTO);
    }
    
    /**
     * 更新文章
     * 
     * @param id 文章ID
     * @param postRequestDTO 文章请求DTO
     * @return 更新的文章
     */
    @PutMapping("/{id}")
    public Result<PostDTO> updatePost(@PathVariable Long id, @RequestBody PostRequestDTO postRequestDTO) {
        if(log.isInfoEnabled()){
            log.info("更新文章: {}, ID: {}", postRequestDTO, id);
        }
        PostDTO postDTO = postsService.updatePost(id, postRequestDTO);
        if (postDTO == null) {
            return Result.failed("文章不存在");
        }
        return Result.success("更新文章成功!", postDTO);
    }
    
    /**
     * 获取文章详情
     * 
     * @param id 文章ID
     * @return 文章详情
     */
    @GetMapping("/{id}")
    public Result<PostDTO> getPostDetail(@PathVariable Long id) {
        if(log.isInfoEnabled()){
            log.info("获取文章详情，ID: {}", id);
        }
        PostDTO postDTO = postsService.getPostDetail(id);
        if (postDTO == null) {
            return Result.failed("文章不存在");
        }
        return Result.success("获取文章详情成功!", postDTO);
    }
    
    /**
     * 删除文章
     * 
     * @param id 文章ID
     * @return 删除结果
     */
    @DeleteMapping("/{id}")
    public Result<String> deletePost(@PathVariable Long id) {
        if(log.isInfoEnabled()){
            log.info("删除文章，ID: {}", id);
        }
        boolean result = postsService.deletePost(id);
        if (!result) {
            return Result.failed("文章不存在");
        }
        return Result.success("删除文章成功!");
    }

    /**
     * 查询文章列表
     * 
     * @param queryRequest 查询条件
     * @return 文章列表
     */
    @GetMapping()
    public Result<PageResult<PostDTO>> listPosts(PostQueryRequest queryRequest) {
        if(log.isInfoEnabled()){
            log.info("查询文章列表，条件: {}", queryRequest);
        }
        PageResult<PostDTO> pageResult = postsService.listPosts(queryRequest);
        return Result.success("查询文章列表成功!", pageResult);
    }

    /**
     * 获取文章统计数据
     * 
     * @param id 文章ID
     * @return 文章统计数据
     */
    @GetMapping("/{id}/stats")
    public Result<PostStatsDTO> getPostStats(@PathVariable Long id) {
        if(log.isInfoEnabled()){
            log.info("获取文章统计数据，ID: {}", id);
        }
        PostStatsDTO postStatsDTO = postsService.getPostStats(id);
        if (postStatsDTO == null) {
            return Result.failed("文章不存在");
        }
        return Result.success("获取文章统计数据成功!", postStatsDTO);
    }

    /**
     * 增加文章浏览量
     * 
     * @param id 文章ID
     * @return 增加结果
     */
    @PutMapping("/{id}/view")
    public Result<String> increaseViewCount(@PathVariable Long id) {
        if(log.isInfoEnabled()){
            log.info("增加文章浏览量，ID: {}", id);
        }
        boolean result = postsService.increaseViewCount(id);
        if (!result) {
            return Result.failed("文章不存在");
        }
        return Result.success("增加文章浏览量成功!");
    }
}